package cn.biplam.front.html.base;

import cn.biplam.common.wrapper.ErrorMessage;

/**
 * Html页面的Meta
 * @author 	WangSong
 * @create 	2009-3-21 上午11:17:47
 * @version 1.0
 */
public class HtmlMeta {
	
	/**
	 * Meta类型
	 */
	public enum Meta_Type{
		/**标签*/
		Type_Property,
		/**绑定到HTTP响应头*/
		Type_Response;
	}

	/**
	 * 	Meta模板类型
	 */
	public enum Templet_Type{
		/**作者*/
		Templet_Author,
		/**设置字符集*/
		Templet_Charset,
		/**关闭页面缓存*/
		Templet_NoCach,
		/**自动刷新页面*/
		Templet_Reload;
	}
	
	/**Http-Equiv value */
	private String httpEquiv=null;
	/**Meta 类型 @see HtmlPageMeta.Type_* */
	private Meta_Type metaType;
	/**刷新间隔时间，用于Refresh，默认5秒 */
	private int refreshSecond=5;
	/**Meta Name */
	private String sName=null;
	/**Meta Content value*/
	private String value=null;
	


/***********************************************************************************/	
	
	/**
	 * 功能：构造方法 基于预定义模板创建
	 * @see HtmlPageMeta.Templet_*
	 * @param templet_indicator
	 * @throws ErrorMessage 
	 */
	public HtmlMeta(Templet_Type templetType) throws ErrorMessage{
		this.createTemplet(templetType);
	}
	
	/**
	 * 功能：获取位于对象起始和结束标签内的 HTML
	 * @param sb
	 * @throws ErrorMessage
	 */
	protected void _getContent(StringBuilder sb) throws ErrorMessage {
		
		switch(this.metaType){
		case Type_Property:
			sb.append("NAME=\"");
			sb.append(this.getName());
			break;
		case Type_Response:
			sb.append("HTTP-EQUIV=\"");
			sb.append(this.getHttpEquiv());
			break;
		}
		sb.append("\" CONTENT=\"");
		sb.append(this.getValue());
		sb.append("\"");
	}

	/**
	 * 功能：按照模板类型，初始化Meta
	 * @param templet_indicator
	 * @throws ErrorMessage 
	 */
	private void createTemplet(Templet_Type templetType) throws ErrorMessage{
		switch(templetType){
		case Templet_Charset:	//设置字符集
			this.setHttpEquiv("Content-Type");
			this.setValue("text/html; charset=GB2312");
			break;
		case Templet_Reload:	//自动刷新页面
			this.setAutoRefresh(this.refreshSecond, null);
			break;
		case Templet_NoCach:	//关闭页面缓存
			this.setHttpEquiv("Pragma");
			this.setValue("no-cache");
			break;
		case Templet_Author:	//作者 (Default is BIPLAM)
			this.setName("Author");
			this.setValue("BIPLAM");
			break;
		}
	}

	/**
	 * 功能：获取对象及其内容的 HTML 形式
	 * @return
	 * @throws ErrorMessage
	 */
	public String draw() throws ErrorMessage {
		StringBuilder sb = new StringBuilder();
		sb.append("<META ");
		this._getContent(sb);
		sb.append("/>\n");
		return sb.toString();
	}

	/**
	 * 功能：返回Http-Equiv value
	 * @return
	 */
	public String getHttpEquiv() {
		return httpEquiv;
	}

	/**
	 * 功能：返回Meta类型 (Response/Property)
	 * @see HtmlPageMeta.Type_*
	 * @return
	 */
	public Meta_Type getMetaType() {
		return metaType;
	}

	/**
	 * 功能：返回Meta Name的值
	 * @return
	 */
	public String getName() {
		return this.sName;
	}

	/**
	 * 功能：返回Meta Content的Value
	 * @return
	 */
	public String getValue() {
		return value;
	}

	/**
	 * 功能：设置Meta内容为自动刷新页面
	 * @param second	间隔秒数
	 * @param url		跳转url
	 */
	public void setAutoRefresh(int second,String url){
		this.setHttpEquiv("Refresh");
		if(url==null){
			this.setValue(Integer.toString(this.refreshSecond));
		}else{
			this.setValue(Integer.toString(this.refreshSecond)+";"+url);
		}
	}
	
	/**
	 * 功能：设置Http-Equiv value
	 * @param httpEquiv
	 */
	public void setHttpEquiv(String httpEquiv) {
		this.setMetaType(Meta_Type.Type_Response);
		this.httpEquiv = httpEquiv;
	}
	
	/**
	 * 功能：设置Meta类型 (Response/Property)
	 * @param metaType
	 * @see HtmlPageMeta.Type_*
	 */
	public void setMetaType(Meta_Type metaType) {
		this.metaType = metaType;
	}

	/**
	 * 功能：设置属性Name，同时设置Meta类型为Property
	 * @param name
	 */
	public void setName(String name) {
		this.setMetaType(Meta_Type.Type_Property);
		this.sName=name;
	}

	/**
	 * 功能：设置Meta Content的Value
	 * @param value
	 */
	public void setValue(String value) {
		this.value = value;
	}

}
